Cloud Run
yaml で書いて反映する
使うシチュ
起動コマンド指定したり sh -c でスクリプト書きたい時
secret を file で特定のパスに配置したり
マルチコンテナやりたいとき
probe 指定したい
$ gcloud beta run services replace services.yaml などで反映
大抵 GA 前の機能使いたいので beta 指定になる...
metadata.annotations["run.googleapis.com/launch-stage"]: BETA
code:service.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: labelstudio-multi
labels:
cloud.googleapis.com/location: asia-northeast1
annotations:
run.googleapis.com/ingress: all
run.googleapis.com/ingress-status: all
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/minScale: "0"
autoscaling.knative.dev/maxScale: "1"
run.googleapis.com/startup-cpu-boost: "true"
spec:
serviceAccountName: app@hogehoge.iam.gserviceaccount.com
containers:
- name: app
image: ...
args:
- |
something command $FOO
ports:
- name: http1
containerPort: 8080
env:
- name: FOO
value: BAR
resources:
limits:
cpu: "1"
memory: 2Gi
traffic:
- percent: 100
latestRevision: true
サイドカー(マルチコンテナ)
共有ボリューム持てる
起動順は spec.template.metadata["run.googleapis.com/container-dependencies"] に書く
startupProbe 見る
FAQ
いろいろ知見がある
textPayload: “The request was aborted because there was no available instance.”
起動してくれよ、という感じだけどインスタンスがないときのエラー
https://gyazo.com/7b5c0a65ce05dbbbe7b805c2032e0327
連続に叩かれると起動間に合って無くて、どんどん起動していってそう
起動 → インスタンスプールに入る前に次のリクエストが来るなど
デフォルトサービスアカウント
デフォルトでは、Cloud Run サービスはデフォルトの Compute Engine サービス アカウントとして実行されます
一度 --no-traffic でデプロイすると自動で最新リビジョンにトラフィックが移らなくなる
After a deployment with this flag the LATEST revision will not receive traffic on future deployments. To restore sending traffic to the LATEST revision by default, run the gcloud run services update-traffic command with --to-latest.
gcloud run services update-traffic --to-latest で動く